package com.my.shaking;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.widget.Toast;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;



public class shakingActivity extends Activity implements SensorEventListener {
    /** Called when the activity is first created. */
 	    private long lastTime;
	    private float speed;
	    private float lastX;
	    private float lastY;
	    private float lastZ;

	    private float x, y, z;
	    private static final int SHAKE_THRESHOLD = 1100;

	    private static final int DATA_X = SensorManager.DATA_X;
	    private static final int DATA_Y = SensorManager.DATA_Y;
	    private static final int DATA_Z = SensorManager.DATA_Z;

	    private SensorManager sensorManager;
	    private Sensor accelerormeterSensor;
	    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        

        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        accelerormeterSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }



	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();

        if (accelerormeterSensor != null)
            sensorManager.registerListener(this, accelerormeterSensor,
                    SensorManager.SENSOR_DELAY_GAME);
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
        if (sensorManager != null)
            sensorManager.unregisterListener(this);
	}
	
	@Override
	public void onAccuracyChanged(Sensor arg0, int arg1) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            long currentTime = System.currentTimeMillis();
            long gabOfTime = (currentTime - lastTime);

            if (gabOfTime > 100) {
                lastTime = currentTime;

                x = event.values[SensorManager.DATA_X];
                y = event.values[SensorManager.DATA_Y];
                z = event.values[SensorManager.DATA_Z];

                speed = Math.abs(x + y + z - lastX - lastY - lastZ) /
                        gabOfTime * 10000;

                if (speed > SHAKE_THRESHOLD) {
                	Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                	vibe.vibrate(500);
                }

                lastX = event.values[DATA_X];
                lastY = event.values[DATA_Y];
                lastZ = event.values[DATA_Z];

            }
        }
	}
}